package com.dimples.dd.system.service;

import com.dimples.dd.common.model.Option;
import com.dimples.dd.common.pojo.PageResult;
import com.dimples.dd.system.framework.sms.core.client.SmsClient;
import com.dimples.dd.system.model.entity.SystemSmsChannelDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dimples.dd.system.model.form.SmsChannelForm;
import com.dimples.dd.system.model.query.SmsChannelPageQuery;
import com.dimples.dd.system.model.vo.SmsChannelPageVO;

import java.util.List;

public interface SystemSmsChannelService extends IService<SystemSmsChannelDO> {

    /**
     * 创建短信渠道
     *
     * @param createSmsChannelForm 短信渠道表单
     * @return 渠道ID
     */
    Long createSmsChannel(SmsChannelForm createSmsChannelForm);

    /**
     * 更新短信渠道
     *
     * @param updateSmsChannelForm 表单
     */
    void updateSmsChannel(SmsChannelForm updateSmsChannelForm);

    /**
     * 删除短信渠道
     *
     * @param id 渠道ID
     */
    void deleteSmsChannel(Long id);

    /**
     * 获得短信渠道
     *
     * @param id 渠道ID
     * @return 表单
     */
    SmsChannelForm selectSmsChannel(Long id);

    /**
     * 分页查询
     *
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    PageResult<SmsChannelPageVO> selectSmsChannelPage(SmsChannelPageQuery pageQuery);

    /**
     * 获得短信渠道精简列表，包含被禁用的数据
     *
     * @return 短信渠道精简列表
     */
    List<Option<Long>> listSmsChannelOptions();

    /**
     * 获得短信客户端
     *
     * @param channelId 渠道编号
     * @return 短信客户端
     */
    SmsClient getSmsClient(Long channelId);

    /**
     * 获得短信客户端
     *
     * @param code 渠道编码
     * @return 短信客户端
     */
    SmsClient getSmsClient(String code);
}
